#include "client.h"

// 接收线程
void * pthread_recv(void * arg)
{
    user_data recv_data = *(user_data *)arg;
    // 接收参数
    int sock = recv_data.sock_fd;
    struct sockaddr_in recv_sockaddr = recv_data.sock_addr;
    socklen_t recv_len = sizeof(recv_sockaddr);
    // 声明缓冲区
    char buf[128];
    memset(buf , 0 , sizeof(buf));
    // 接收字符数量
    int byte_recv = 0;

    // 返回值变量
    static int return_val = 0;

    while (1)
    {
        byte_recv = recvfrom(sock , buf , sizeof(buf) , 0 , (struct sockaddr *)&recv_sockaddr, &recv_len);
        // 错误判断
        if(-1 == byte_recv)
        {
            ERRLOG("接收错误");
            return NULL;
        }
        // 结束状态
        else if(0 == byte_recv)
        {
            printf("读取结束\n");
            // 返回1  代表TCP 连接结束
            return_val = 1;
            return (void *)&return_val;
        }

        // 打印接收的字符
        printf("\n输入:%s\n", buf);

        // 清空buf
        memset(buf , 0 , sizeof(buf));
    }
}

// 发送线程
void * pthread_send(void * arg)
{
    user_data send_data = *(user_data *)arg;
    // 接收参数
    int sock = send_data.sock_fd;
    struct sockaddr_in send_sockaddr = send_data.sock_addr;
    socklen_t send_len = sizeof(send_sockaddr);
    // 声明缓冲区
    char buf[128];
    memset(buf , 0 , sizeof(buf));

    while (1)
    {
        // 从键盘获取字符串
        printf("发送:");
        scanf("%s" , buf);
        if(0 == strlen(buf))
        {
            printf("未输入数据 , 请重新输入\n");
            continue;
        }

        // 发送
        if(-1 == sendto(sock , buf , strlen(buf) , 0 , (struct sockaddr *)&send_sockaddr, send_len))
        {
            ERRLOG("写入错误");
            return NULL;
        }

        // 清空缓冲区
        memset(buf, 0 , sizeof(buf));
    }
}
